import {DataTypes, Op, QueryTypes, Sequelize} from "sequelize";

const sequelize = new Sequelize({
    dialect: 'sqlite',
    storage: '/Users/junki/dev/db/sqlite.db',
    logging: log => {
        // 可用自定义日志处理器处理日志
        console.log(`[${new Date().toISOString()}]Sequelize日志：${log}`)
    }
});

// 查询所有表名
// sequelize.getQueryInterface().showAllTables().then(result => {
//     console.log('查询结果：', result)
// })

// 创建表模型
const userInfoModel = sequelize.define('user_info', {
    id: {
        type: DataTypes.STRING,
        primaryKey: true
    },
    username: DataTypes.STRING,
    password: DataTypes.STRING
}, {
    freezeTableName: true, // 指定表名，默认表名是user_infos
    tableName: 'user_info', // 自定义表名
    timestamps: false // 不生成创建时间、修改时间字段
})

// 同步数据库以创建表
// sequelize.sync()
//     .then(() => {
//         console.log('表已创建或已存在');
//     })
//     .catch(err => {
//         console.error('创建表时出错：', err);
//     });

// 插入一条数据
// userInfoModel.create({
//     id: '1001',
//     username: 'junki',
//     password: '1234qwer'
// })
//     .then(user => {
//         console.log('插入的用户数据：', user.toJSON());
//     })
//     .catch(err => {
//         console.error('插入数据时出错：', err);
//     });

// 根据ID修改数据
// userInfoModel.update(
//     {
//         username: 'junki1001',
//         password: '123456789'
//     },
//     {
//         where: {
//             id: '1001'
//         }
//     }
// )
//     .then(([rowsUpdated]) => {
//         if (rowsUpdated > 0) {
//             console.log(`成功更新了 ${rowsUpdated} 行数据`);
//         } else {
//             console.log(`未找到 id 为 ${userIdToUpdate} 的用户`);
//         }
//     })
//     .catch(err => {
//         console.error('更新数据时出错：', err);
//     });

// 删除数据
// userInfoModel.destroy({
//     where: {
//         id: '1001'
//     }
// })
//     .then(rowsDeleted => {
//         if (rowsDeleted > 0) {
//             console.log(`成功删除了 ${rowsDeleted} 行数据`);
//         } else {
//             console.log(`未找到 id 为 ${userIdToDelete} 的用户`);
//         }
//     })
//     .catch(err => {
//         console.error('删除数据时出错：', err);
//     });

// 条件查询
// userInfoModel.findOne({
//     where: {
//         id: '1001'
//     }
// }).then(result => {
//     console.log('查询结果：', result.toJSON())
// }).catch(err => {
//     console.error('查询错误：', err)
// })
//
// userInfoModel.findAll({
//     where: {
//         username: {
//             [Op.like]: `%j%`
//         }
//     }
// }).then(result => {
//     console.log('查询结果：')
//     result.forEach(r => {
//         console.log(r.toJSON())
//     })
// }).catch(err => {
//     console.error('查询错误：', err)
// })
//
// userInfoModel.findOne({
//     where: {
//         [Op.and]: [
//             { username: 'junki' },
//             { password: '1234qwer' }
//         ]
//     }
// }).then(result => {
//     console.log('查询结果：', result.toJSON())
// }).catch(err => {
//     console.error('查询错误：', err)
// })

// 分页查询
const itemsPerPage = 10; // 每页的记录数
const currentPage = 1; // 当前页数
userInfoModel.findAll({
    limit: itemsPerPage, // 每页的记录数
    offset: (currentPage - 1) * itemsPerPage, // 偏移量
})
    .then(users => {
        if (users.length > 0) {
            console.log('查询到的用户数据：');
            users.forEach(user => {
                console.log(user.toJSON());
            });
        } else {
            console.log('未找到匹配的用户');
        }
    })
    .catch(err => {
        console.error('查询数据时出错：', err);
    });

// 执行本地SQL
// sequelize.query("SELECT * FROM user_info WHERE username = :username AND password = :password", {
//     replacements: {
//         username: 'junki',
//         password: '1234qwer'
//     },
//     type: QueryTypes.SELECT
// })
//     .then(results => {
//         console.log('查询结果：', results);
//     })
//     .catch(err => {
//         console.error('执行 SQL 查询时出错：', err);
//     });